package com.softer.wxzj.mapper;

import com.softer.wxzj.entity.AccKeepAccount;
import com.softer.wxzj.entity.AccTransactionLog;
import com.softer.wxzj.entity.BaseBankInfo;
import com.softer.wxzj.mapper.base.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

@Repository
public interface AccTransactionLogMapper extends BaseMapper<AccTransactionLog> {
    /**
     * 根据房间ID查询最后一次结息信息
     *
     * @param houseId
     * @return
     */
    AccTransactionLog getLastInterestInfoByHouseId(String houseId);

    /**
     * 查询最大的全额退款、销户记账日期
     *
     * @param houseId
     * @return
     */
    String getFullRefMaxTallyDateByHouseId(String houseId);

    /**
     * 房屋退款记账总金额
     *
     * @param houseId
     * @return
     */
    BigDecimal getLogRefTotalPayAmount(String houseId);

    /**
     * 根据业务编号修改
     *
     * @param busiNo
     * @return
     */
    int updateStateByBusiNo(@Param("state") String state, @Param("busiNo") String busiNo);

    /**
     * 根据房间查询最大的结息记账日期
     *
     * @param houseId
     * @return
     */
    Date getMaxCalculateTallyDateByHouseId(String houseId);

    /**
     * 房屋交存记账总金额
     *
     * @param houseId
     * @return
     */
    BigDecimal getLogDepTotalPayAmount(String houseId);

    /**
     * 房屋退款使用记账总金额
     *
     * @param houseId
     * @return
     */
    BigDecimal getLogRefExpTotalPayAmount(String houseId);

    /**
     * 根据房屋id查询记账列表
     *
     * @param houseId
     * @return
     */
    List<AccTransactionLog> getListByHouseId(String houseId);

    /**
     * 获取分摊系数 保留8位小数 只舍不入
     *
     * @param disAmount 欲分摊金额
     * @param endDate   分摊日期
     * @return
     */
    BigDecimal getDistributionCoefficient(@Param("disAmount") BigDecimal disAmount, @Param("endDate") String endDate);

    /**
     * 获取每户分摊金额列表 保留2位小数
     *
     * @param disRatio 分摊系数
     * @param endDate  分摊日期
     * @return
     */
    List<AccTransactionLog> getDistributionAmount(@Param("disRatio") BigDecimal disRatio, @Param("endDate") String endDate);

    /**
     * 通过编号查询详情
     *
     * @param busiNo
     * @return
     */
    List<AccTransactionLog> selectByBusNo(String busiNo);

    /**
     * 根据busiNo获取记账详情（owner表，house表关联查询）
     * @param busiNo
     * @return
     */
    List<AccTransactionLog> selectFullByBusNo(String busiNo);

    /**
     * 冲正修改状态
     *
     * @param id
     * @param state
     * @return
     */
    int updateStateById(@Param("state") String state, @Param("id") String id);

    /**
     * 交易明细
     *
     * @return
     */
    List<AccTransactionLog> selectLog(String houseId);

    /**
     * 结息后修改 及更新比结息日晚的本金+利息金额
     *
     * @param interestAmount
     * @param tallyDate
     * @param ownerId
     * @return
     */
    int updateFundbalByTallyDate(@Param("interestAmount") BigDecimal interestAmount, @Param("tallyDate") String tallyDate, @Param("ownerId") String ownerId);

    /**
     * 结息后修改 房间信息的利息及计息日期
     *
     * @param interestAmount
     * @param tallyDate
     * @param houseId
     * @return
     */
    int updateHouseInfoRateDate(@Param("interestAmount") BigDecimal interestAmount, @Param("tallyDate") String tallyDate, @Param("houseId") String houseId);

    /**
     * 查询单号及条件
     *
     * @param houseId
     * @return
     */
    List<AccTransactionLog> selectbus(String houseId);

    /**
     * 修改状态
     *
     * @param buss
     * @return
     */
    int updateState(String buss);

    /**
     * 查询房屋
     *
     * @param id
     * @return
     */
    List<AccTransactionLog> selectAllPayAmount(String id);

    /**
     * 查询使用多少钱
     *
     * @param houseId
     * @return
     */
    List<AccTransactionLog> selectByHouseId(@Param("houseId") String houseId);

    /**
     * 房屋使用多少钱
     *
     * @param houseId
     * @return
     */
    BigDecimal selectExpByHouseId(String houseId);

    /**
     * 查询这个日期之前房屋存了多少钱
     *
     * @param houseId
     * @param tallyDate
     * @return
     */
    List<AccTransactionLog> selectHouseByTallyTime(@Param("houseId") String houseId, @Param("tallyDate") String tallyDate);

    /**
     * 查询该房屋总共交存多少钱 交存
     *
     * @param houseId
     */
    AccTransactionLog selectMoneyDep(@Param("houseId") String houseId);

    /**
     * 查询该房屋总共交存多少钱 退款
     *
     * @param houseId
     */
    AccTransactionLog selectMoneyReq(@Param("houseId") String houseId);

    /**
     * 测试该房屋最早的缴存记账
     *
     * @param id
     * @return
     */
    AccTransactionLog selectOldDep(@Param("id") String id);

    /**
     * 查询该业主是不是第一次交存
     *
     * @param id
     * @return
     */
    int selectByOwnerId(String id);

    int selectByOwnerIdAll(String id);

    /**
     * 该业主使用多少钱
     *
     * @param houseId
     * @return
     */

    BigDecimal selectMoneyExpAll(@Param("houseId") String houseId);


    /**
     * 该业主退款多少钱
     *
     * @param houseId
     * @return
     */

    BigDecimal selectMoneyReqAll(@Param("houseId") String houseId);

    /**
     * 交存多少钱
     *
     * @param houseId
     * @return
     */
    BigDecimal selectMoneyDepAll(@Param("houseId") String houseId);

    /**
     * 修改状态
     *
     * @param reqNo
     * @param state
     * @param dateNow
     */
    int updateStateByNo(@Param("reqNo") String reqNo, @Param("state") String state, @Param("dateNow") String dateNow);

    /**
     * @param houseId
     * @param isEffective
     * @return
     */
    int selectIsEffectiveById(@Param("houseId") String houseId, @Param("isEffective") String isEffective);

    /**
     * 修改状态
     *
     * @param houseId
     * @param isEffective
     * @return
     */
    int updateIsEffectiveById(@Param("houseId") String houseId, @Param("isEffective") String isEffective, @Param("isEffectiveOld") String isEffectiveOld);

    /**
     * 查询这个房屋是不是最后一次记账
     *
     * @param id * @param busiNo
     * @return
     */
    int selectEndByHid(@Param("id") String id, @Param("tallyTime") String tallyTime);

    /**
     * 查询这个房屋同天
     *
     * @param id
     * @param tallyTime
     * @return
     */
    List<AccTransactionLog> selectEndByHidAll(@Param("id") String id, @Param("tallyTime") String tallyTime);

    /**
     * 查询房屋合计
     *
     * @param houseId
     * @return
     */
    BigDecimal selectAllMoney(String houseId);

    /**
     * 修改log表的金额
     *
     * @param id
     * @param funBal
     * @return
     */
    int updateFunBal(@Param("id") String id, @Param("funBal") BigDecimal funBal);

    /**
     * 同一天记账
     *
     * @param houseId
     * @param tallyDate
     * @return
     */
    List<AccTransactionLog> selectHouseByTallyTimeNow(@Param("houseId") String houseId, @Param("tallyDate") String tallyDate);

    /**
     * 之后的日期
     *
     * @param houseId
     * @param tallyDate
     * @return
     */
    List<AccTransactionLog> selectHouseByTallyTimeBefor(@Param("houseId") String houseId, @Param("tallyDate") String tallyDate);

    /**
     * 变更审核
     *
     * @param houseId
     * @param time
     * @return
     */
    int selectHouseByCreateNow(@Param("houseId") String houseId, @Param("time") String time);

    /**
     * 查询房屋有没有缴存过
     *
     * @param id
     * @return
     */
    int selectDepNom(String id);

    int updateIsEffectiveOnwerId(String id);


    /**
     * 修改过户状态
     *
     * @param houseId
     * @return
     */
    int updateNotDusi(@Param("houseId") String houseId, @Param("effective") String effective);

    /**
     * 修改上一个状态
     *
     * @param houseId
     * @param owenrId
     * @return
     */
    int updateNextOwner(@Param("houseId") String houseId, @Param("owenrId") String owenrId);

    /**
     * 通过记账编号查询详情
     */
    List<AccTransactionLog> selectLogByBusiNo(@Param("busiNo") String busiNo, @Param("buildName") String buildName,@Param("fuzzy")String fuzzy);

    AccTransactionLog selectLogByBusiNoAll(@Param("busiNo") String busiNo, @Param("buildName") String buildName);

    /**
     * 查询缴存利息几张小区开发商分组
     *
     * @return
     */
    List<AccTransactionLog> selectByRegionAndOrg(@Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * 查询缴存利息几张小区开发商分组银行
     *
     * @param id
     * @param ownerId
     * @return
     */
    List<BaseBankInfo> selectByBankId(@Param("id") String id, @Param("ownerId") String ownerId, @Param("startTime") String startTime, @Param("endTime") String endTime);

    List<BaseBankInfo> selectByBankIdAll(@Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     *
     * 通过记账编号查看id
     * @param inoId
     * @return
     */
    List<BaseBankInfo> selectAllByNo(String inoId);

    /**
     * 通过自然幢分组查询该账号下的数据
     * @param busiNo
     * @return
     */
    List<AccKeepAccount> selectGroupByBuild(String busiNo);
}
